home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 039a / dflat8.zip / SYSMENU.C < prev    next >
Text File  |  1991-09-30  |  3KB  |  92 lines

  1. /* ------------- sysmenu.c ------------ */
  2.  
  3. #include "dflat.h"
  4.  
  5. int SystemMenuProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2)
  6. {
  7.     int mx, my;
  8.     WINDOW wnd1;
  9.     switch (msg)    {
  10.         case CREATE_WINDOW:
  11.             wnd->holdmenu = ActiveMenuBar;
  12.             ActiveMenuBar = &SystemMenu;
  13.             SystemMenu.PullDown[0].Selection = 0;
  14.             break;
  15.         case LEFT_BUTTON:
  16.             wnd1 = GetParent(wnd);
  17.             mx = (int) p1 - GetLeft(wnd1);
  18.             my = (int) p2 - GetTop(wnd1);
  19.             if (HitControlBox(wnd1, mx, my))
  20.                 return TRUE;
  21.             break;
  22.         case LB_CHOOSE:
  23.             PostMessage(wnd, CLOSE_WINDOW, 0, 0);
  24.             break;
  25.         case DOUBLE_CLICK:
  26.             if (p2 == GetTop(GetParent(wnd)))    {
  27.                 PostMessage(GetParent(wnd), msg, p1, p2);
  28.                 SendMessage(wnd, CLOSE_WINDOW, TRUE, 0);
  29.             }
  30.             return TRUE;
  31.         case SHIFT_CHANGED:
  32.             return TRUE;
  33.         case CLOSE_WINDOW:
  34.             ActiveMenuBar = wnd->holdmenu;
  35.             break;
  36.         default:
  37.             break;
  38.     }
  39.     return DefaultWndProc(wnd, msg, p1, p2);
  40. }
  41.  
  42. void BuildSystemMenu(WINDOW wnd)
  43. {
  44.     int lf = GetLeft(wnd)+1;
  45.     int tp = GetTop(wnd)+1;
  46.     int ht = MenuHeight(SystemMenu.PullDown[0].Selections);
  47.     int wd = MenuWidth(SystemMenu.PullDown[0].Selections);
  48.     WINDOW SystemMenuWnd;
  49.  
  50.     SystemMenu.PullDown[0].Selections[6].Accelerator = 
  51.         (GetClass(wnd) == APPLICATION) ? ALT_F4 : CTRL_F4;
  52.  
  53.     if (lf+wd > SCREENWIDTH-1)
  54.         lf = (SCREENWIDTH-1) - wd;
  55.     if (tp+ht > SCREENHEIGHT-2)
  56.         tp = (SCREENHEIGHT-2) - ht;
  57.  
  58.     SystemMenuWnd = CreateWindow(POPDOWNMENU, NULL,
  59.                     lf,    tp,    ht,    wd,    NULL, wnd, SystemMenuProc, 0);
  60.  
  61.     if (wnd->condition == ISRESTORED)
  62.         DeactivateCommand(&SystemMenu, ID_SYSRESTORE);
  63.     else
  64.         ActivateCommand(&SystemMenu, ID_SYSRESTORE);
  65.  
  66.     if (TestAttribute(wnd, MOVEABLE) && wnd->condition != ISMAXIMIZED)
  67.         ActivateCommand(&SystemMenu, ID_SYSMOVE);
  68.     else
  69.         DeactivateCommand(&SystemMenu, ID_SYSMOVE);
  70.  
  71.     if (wnd->condition != ISRESTORED ||    TestAttribute(wnd, SIZEABLE) == FALSE)
  72.         DeactivateCommand(&SystemMenu, ID_SYSSIZE);
  73.     else
  74.         ActivateCommand(&SystemMenu, ID_SYSSIZE);
  75.  
  76.     if (wnd->condition == ISMINIMIZED || TestAttribute(wnd, MINMAXBOX) == FALSE)
  77.         DeactivateCommand(&SystemMenu, ID_SYSMINIMIZE);
  78.     else
  79.         ActivateCommand(&SystemMenu, ID_SYSMINIMIZE);
  80.  
  81.     if (wnd->condition != ISRESTORED ||    TestAttribute(wnd, MINMAXBOX) == FALSE)
  82.         DeactivateCommand(&SystemMenu, ID_SYSMAXIMIZE);
  83.     else
  84.         ActivateCommand(&SystemMenu, ID_SYSMAXIMIZE);
  85.  
  86.     SendMessage(SystemMenuWnd, BUILD_SELECTIONS,
  87.                 (PARAM) &SystemMenu.PullDown[0], 0);
  88.     SendMessage(SystemMenuWnd, SHOW_WINDOW, 0, 0);
  89. }
  90.  
  91.  
  92.